#include "configuration.h"

namespace mGameEngine
{

Configuration::Configuration(void) : _sections()
{
}

Configuration::~Configuration(void)
{
}

bool Configuration::hasSection(const String &sectionName) const
{
    return _sections.find(sectionName) != _sections.end();
}

void Configuration::addSection(const String &sectionName)
{
    _sections[sectionName];
}

void Configuration::removeSection(const String &sectionName)
{
    _sections.erase(sectionName);
}

const Map<String, String> &Configuration::getSectionValues(const String &sectionName) const
{
    return _sections.find(sectionName)->second;
}

bool Configuration::hasValue(const String &sectionName, const String &valueName) const
{
    // no section
    if(!hasSection(sectionName))
    {
        return false;
    }

    const Map<String, String> &section = getSectionValues(sectionName);
    return section.find(valueName) != section.end();
}

void Configuration::addValue(const String &sectionName, const String &valueName, const String &value)
{
    // no section
    if(!hasSection(sectionName))
    {
        return;
    }

    _sections[sectionName][valueName] = value;
}

void Configuration::removeValue(const String &sectionName, const String &valueName)
{
    // no section
    if(!hasSection(sectionName))
    {
        return;
    }

    _sections[sectionName].erase(valueName);
}

const String &Configuration::getValue(const String &sectionName, const String &valueName) const
{
    // no section
    if(!hasSection(sectionName))
    {
        return String();
    }

    return (_sections.find(sectionName)->second).find(valueName)->second;
}

} // namespace 
